package entidades;

import util.Util;
import util.exceptions.NaoExistemPeersSuficientesParaSeFazerTroca;
import entidades.politica.PoliticaSelecaoBlocos;
import entidades.politica.PoliticaSelecaoVizinhos;

public class Seed extends Entidade {

	public final static double taxa = Util.MI;
	private PoliticaSelecaoVizinhos politicaSelecaoVizinhos;
	private PoliticaSelecaoBlocos politicaSelecaoBlocos;
	
	public Seed(double instanteChegada, PoliticaSelecaoVizinhos politicaSelecaoVizinhos, PoliticaSelecaoBlocos politicaSelecaoBlocos) {
		super(instanteChegada);
		this.politicaSelecaoVizinhos = politicaSelecaoVizinhos;
		this.politicaSelecaoBlocos = politicaSelecaoBlocos;
	}
	
	public Peer selecionaPeer() throws NaoExistemPeersSuficientesParaSeFazerTroca {
		return politicaSelecaoVizinhos.seleciona();
	}
	
	public int selecionaBloco(Peer peerDestino) {
		return politicaSelecaoBlocos.seleciona(peerDestino);
	}
	
	public boolean saiuSistema() {
		return super.instanteSaida > 0;
	}
	
}
